var app = require('express')()
var server = require('http').Server(app)
var io = require('socket.io')(server)
// 启动服务
server.listen(3000, () => {
    console.log('启动服务成功')
})
// express处理静态资源
// public设置为静态资源目录
app.use('/public', require('express').static('./public'));
app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html')
})
// 记录所有登录过的用户
const userList = []
io.on('connection', function (socket) {
    // 服务端监听登录事件
    socket.on('login', data => {
        // 判断用户有没有登录过, 如果userList中有这个用户名，说明该用户已经登录过了
        var user = userList.find(item => item.userName === data.userName)
        if (user) {
            // 用户登录过，即告诉客户端登录失败
            socket.emit('loginError', { msg: '登录失败，用户已存在' })
        } else {
            // 用户不存在，把这个用户加进来, 告诉客户端登录成功
            userList.push(data)
            socket.emit('loginSuccess', data)
            // 告诉所有人有新用户加入 ，目前聊天室的人数
            io.emit('addUser', data)
            io.emit('userNum', JSON.stringify(userList))
            // 把登录成功的用户名和用户头像存起来
            socket.userName = data.userName
            socket.avatar = data.avatar

        }
    })
    // disconnect 用户断开服务， 关闭聊天窗口就断开服务了
    socket.on('disconnect', () => {
        // 把用户从用户列表中删除
        // 找到和当前登录的用户名相同的下标
        var idx = userList.findIndex(item => item.userName)
        // 把这个用户删除
        userList.splice(idx, 1)
        // 告诉所有人他离开了
        io.emit('delUser', {
            userName: socket.userName,
            avatar: socket.avatar
        })
        // 告诉所有人当前聊天室用户人数发送变化
        io.emit('userNum', JSON.stringify(userList))

    })
    // 监听聊天消息
    socket.on('sendMessage', data => {
        console.log('监听聊天', data)
        // 广播给所有人
        io.emit('receiveMessage', {
            userName: data.userName,
            msg: data.msg,
            avatar: data.avatar
        })
    })
})
